home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 4
/
Apprentice-Release4.iso
/
Source Code
/
Libraries
/
Graphic Elements 3
/
GEMisc
/
QTMovieGE.c
< prev
next >
Wrap
Text File
|
1995-06-18
|
3KB
|
100 lines
/*
QTMovieGE.c
QuickTime movie as a graphic element
Copyright 1995 by Al Evans. All rights reserved.
5/10/95
*/
#include "QTMovieGE.h"
#include "Rects.h"
pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld);
pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element);
GrafElPtr NewQTMovieGE(GEWorldPtr world, OSType id, short plane,
Movie movie, short xPos, short yPos)
{
GrafElPtr element;
Rect movieRect;
element = NewGrafElement(world, id, plane, sizeof(QTMovieGE), NoLoader, 0, 0);
if (element) {
element->copyMode = srcCopy;
element->flags = geShown;
element->renderIt = RenderQTMovieGE;
element->drawIt = nil;
element->changeIntrvl = 0;
element->lastChangeTime = CurrentGETime(world);
// Set up movie
SetMovieGWorld(movie, (CGrafPtr) world->stageGWorld, nil);
GetMovieBox(movie, &movieRect);
RectOffset(&movieRect, -movieRect.left, -movieRect.top);
movieRect.right = movieRect.left + ScaleToWorld(world, RectWidth(&movieRect));
movieRect.bottom = movieRect.top + ScaleToWorld(world, RectHeight(&movieRect));
element->graphRect = movieRect;
element->animationRect = movieRect;
RectOffset(&element->animationRect, ScaleToWorld(world, xPos),
ScaleToWorld(world, yPos));
SetMovieBox(movie, &element->animationRect);
GoToBeginningOfMovie(movie);
ChangedRect(world, &element->animationRect);
((QTMovieGEPtr) element)->geMovie = movie;
((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
SetCleanupProc(world, id, CleanupMovieGE);
}
return element;
}
pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld)
{
/*
Since QuickTime doesn't pay attention to clipRgn, manipulate the visRgn
directly. This is MUCH faster than using SetMovieDisplayClipRgn()
*/
RgnHandle saveRgn = destGWorld->visRgn;
RgnHandle drawRgn = NewRgn();
RectRgn(drawRgn, &movieElement->drawRect);
destGWorld->visRgn = drawRgn;
UpdateMovie(((QTMovieGEPtr) movieElement)->geMovie);
MoviesTask(((QTMovieGEPtr) movieElement)->geMovie, 1);
destGWorld->visRgn = saveRgn;
DisposeRgn(drawRgn);
}
pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element)
{
DisposeMovie(((QTMovieGEPtr) element)->geMovie);
}
pascal void GEMovieAutoChange(GEWorldPtr world, GrafElPtr element)
{
// If element has been moved, move the QT movie to new position
// (comparing points as longs!)
if (*((long *) &((QTMovieGEPtr) element)->tlSave) != *((long *) &element->animationRect))
{
SetMovieBox(((QTMovieGEPtr) element)->geMovie, &element->animationRect);
((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
}
ChangedRect(world, &element->animationRect);
}
Movie GetGEMovie(GEWorldPtr world, OSType movieGEID)
{
QTMovieGEPtr movieElement = (QTMovieGEPtr) FindElementByID(world, movieGEID);
if (movieElement == nil)
return nil;
else
return movieElement->geMovie;
}